#include "myjs.h"

#define MYSQL_HOSTNAME "127.0.0.1"
#define MYSQL_USERNAME "denis"
#define MYSQL_PASSWORD "cz630j"
#define MYSQL_DATABASE "trade_test"


//////////////////////////////////////////////////////////////////////////////////
//
JSBool myjs_sql(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){
	pthread_mutex_lock(&mux_sql);
	char *q;
	JS_ConvertArguments(cx, argc, argv, "s", &q);
	
	static MYSQL *conn=NULL;
	if(!conn){
		if(!(conn=mysql_init(NULL)))
			fatal("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
		if(!(mysql_real_connect(conn, MYSQL_HOSTNAME, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE, 0, NULL, 0)))
			fatal("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
		if (mysql_set_character_set(conn, "utf8"))
			fatal("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
	}

	if(mysql_query(conn,q))
		fatal("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));

	MYSQL_RES *rs;
	MYSQL_ROW row;
	int i, cols;

	rs = mysql_store_result(conn);
	cols = mysql_num_fields(rs);

	jsval f;
	JS_ConvertValue(cx, argv[1], JSTYPE_FUNCTION, &f);
		
	jsval *f_argv=calloc(cols, sizeof(jsval));
	jsval f_ret;

	JS_BeginRequest(cx);
	while (row=mysql_fetch_row(rs)) {
		for(i=0; i<cols; i++)
			f_argv[i] = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, row[i]));
		if(JS_TRUE!=JS_CallFunctionValue(cx, JSVAL_NULL, f, cols, f_argv, &f_ret))
			goto end;
	}
end:
	mysql_free_result(rs);
	JS_EndRequest(cx);
	
	pthread_mutex_unlock(&mux_sql);
	
	*rval=JSVAL_VOID;
	return JS_TRUE;
	
	//mysql_close(conn);
}
